
new function() {
  
  var keywords = 
    "abstract and and_eq auto bitand bitor bool break case catch char class compl const const_cast "+
    "continue default delegate delete do double dynamic_cast each else enum explicit extern event "+
    "false finally float for friend gcnew generic goto if in inline int internal initonly interface "+
    "literal long mutable namespace new not not_eq nullptr operator or or_eq override private property "+
    "protected public ref register reinterpret_cast return sealed signed sizeof short static static_cast "+
    "struct switch template this true try typedef typeid throw typename union unsigned using value "+
    "virtual void volatile wchar_t while where xor xor_eq";
  
  this.patterns = [
    { regex: Quode.JSH.util.regex.multiLComment, css: "comment" },
    { regex: Quode.JSH.util.regex.singleLComment, css: "comment" },
    { regex: Quode.JSH.util.regex.doubleQString, css: "double-string" },
    { regex: Quode.JSH.util.regex.singleQString, css: "single-string" },
    
    { regex: Quode.JSH.util.regex.number, css: "number" },
    { regex: new RegExp("\\b0b\\d+\\b", "i"), css: "number" },
            
    { regex: new RegExp("^[ \\t]*#[^#](?:[^\\r\\n](?!/[/*]))*", "m"), css: "preproc"},
    { regex: new RegExp("[\\][{}()<>\\\\=,?;.:!&|^/+*%-]+"), css: "operator" },
    { regex: Quode.JSH.util.regex.keywords(keywords), css: "keyword" }
  ];
  
  Quode.JSH.language.register(this, ["cpp", "c++", "c"]);
};
